package org.goodprinciples.commons.command;

import java.io.Serializable;
import org.goodprinciples.commons.command.exception.CommandException;

/**
 * Rappresente un comando generico. Esso contiene all'interno
 * del metodo <code>execute</code> la logica necessaria per svolgere il suo compito.
 * Si fa notare che un comando generico <b>non pu&ograve</b> interfacciarsi con
 * database e <b>non svolge</b> operazioni transazionali.
 * 
 * @author Francesco Conte
 */
public interface Command extends Serializable {
    
    public CommandInfo getCommandInfo();
    
    public void setCommandInfo(CommandInfo commandInfo);

    /**
     * Contiene la logica di esecuzione di un comando
     * 
     * @throws CommandException viene propagato in seguito ad un errore durante 
     * l'esecuzione
     */
    public void execute() throws CommandException;
    
    /**
     * Contiene la logica per cancellare l'esecuzione di un comando
     * 
     * @throws CommandException viene propagato in seguito ad un errore durante
     * la cancellazione degli effetti di un comando
     */
    public void cancel() throws CommandException;

}
